package C8_5_ReplaceArrayWithObject;

import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Objects;

/**
 * Desc:&emsp;&ensp;以对象替换数组，对数组中的每个元素一个字段表示
 * @author 李渊&emsp;
 * @version 1.0
 * @since V4.3&emsp;2022/7/13
 */
public class C8_5_demo {
    // ===== 重构前 =====
    static void beforeRefactor(){
        String[] row = new String[3];
        row[0] = "XXX";
        row[1] = "123";
        // ...
        String name = row[0];
        int times = Integer.parseInt(row[1]);
    }

    // ===== 重构 =====
    // 1 第一步
    // 1.1先把数组用对象包装起来，声明为public
    static class Performance{
        public String[] _data = new String[3];
    }
    // 1.2 使用数组的地方替换成声明对象，然后访问属性的方式
    static void useData(){
        Performance  row = new Performance();
        row._data[0] = "XXX";
        row._data[1] = "123";
        // ...
        String name = row._data[0];
        int times = Integer.parseInt(row._data[1]);
    }

    // 2 第二步
    // 2.1 逐一为数组元素添加有意义的getter和setter，并且将data声明为private
    static class Performance2{
        private String[] _data = new String[3];

        public String getName() {
            return _data[0];
        }

        public void setName(String arg) {
            _data[0] = arg;
        }

        public int getTimes() {
            return Integer.parseInt(_data[1]);
        }

        public void setTimes(String arg) {
            _data[1] = arg;
        }
    }
    // 2.2 使用替换为setter和getter
    static void useData2(){
        Performance2 row = new Performance2();
        row.setName("XXX");
        row.setTimes("123");
        // ...
        String name = row.getName();
        int times = row.getTimes();
    }

    // 3 第三步，将数组用一个一个的字段替换掉
    static class Performance3{
        private String _name;

        public String get_name() {
            return _name;
        }

        public void set_name(String _name) {
            this._name = _name;
        }
        // ...
    }
}
